const BULLET_TYPES = {
  fire: {
    key: 'bullet_fire',
    anim: 'bullet_fly_fire',
    damage: 1,
    effect: 'burn',
    speed: 300
  },
  ice: {
    key: 'bullet_ice',
    anim: 'bullet_fly_ice',
    damage: 0.5,
    effect: 'freeze',
    speed: 250
  },
  flare: {
    key: 'bullet_flare',
    anim: 'bullet_fly_flare',
    damage: 0,
    effect: 'light',
    speed: 200
  }
};

class BulletManager {
  constructor(scene) {
    this.scene = scene;

    // 建立可复用的子弹组，使用 Arcade Sprite
    this.group = scene.physics.add.group({
      classType: Phaser.Physics.Arcade.Sprite,
      maxSize: 100,
      runChildUpdate: true
    });
  }

  // shoot(x, y, dir, type = 'fire', owner = 'player') {
  //   const config = BULLET_TYPES[type];
  //   const bullet = this.group.get(x, y, config.key);

  //   if (!bullet) return;
  //   bullet.setData('owner', owner);   // 用来标记子弹是谁发射的

  //   bullet.setActive(true);
  //   bullet.setVisible(true);
  //   bullet.setPosition(x, y);
  //   bullet.setOrigin(0.5);
  //   bullet.setData('effect', config.effect);
  //   bullet.setData('damage', config.damage);

  //  bullet.setData('owner', owner);      // ← 新增：标记子弹归属

  //   bullet.play(config.anim);

  //   switch (dir) {
  //     case 0: bullet.setVelocity(0, -config.speed); break;
  //     case 1: bullet.setVelocity(0, config.speed); break;
  //     case 2: bullet.setVelocity(-config.speed, 0); break;
  //     case 3: bullet.setVelocity(config.speed, 0); break;
  //   }
  // }
    shoot(x, y, dir, type = 'fire', owner = 'player') {
    const config = BULLET_TYPES[type];
    const bullet = this.group.get(x, y, config.key);

    if (!bullet) return;

    // ✅ 强制启用 data 系统
    if (!bullet.data) {
      bullet.setDataEnabled();
    }

    bullet.setActive(true);
    bullet.setVisible(true);
    bullet.setPosition(x, y);
    bullet.setOrigin(0.5);

    // ✅ 设置自定义属性（尤其是 owner）
    bullet.setData('owner', owner);
    bullet.setData('effect', config.effect);
    bullet.setData('damage', config.damage);

    bullet.play(config.anim);

    switch (dir) {
      case 0: bullet.setVelocity(0, -config.speed); break;
      case 1: bullet.setVelocity(0, config.speed); break;
      case 2: bullet.setVelocity(-config.speed, 0); break;
      case 3: bullet.setVelocity(config.speed, 0); break;
    }
  }


  update() {
    const w = this.scene.sys.game.config.width;
    const h = this.scene.sys.game.config.height;

    this.group.children.each((bullet) => {
      if (!bullet.active) return;

      if (
        bullet.x < -16 || bullet.x > w + 16 ||
        bullet.y < -16 || bullet.y > h + 16
      ) {
        bullet.setActive(false);
        bullet.setVisible(false);
        bullet.body.stop();
      }
    });
  }
}
//